--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BLESerial.h 6bbcaa0ba959cfcb3aaff398339fa09cce054fd6 (6bbcaa0b) Text, 3.26 KB
T8b949e// Copyright (C) 2024, Mark Qvist
T8b949e// This program is free software: you can redistribute it and/or modify
T8b949e// it under the terms of the GNU General Public License as published by
T8b949e// the Free Software Foundation, either version 3 of the License, or
T8b949e// (at your option) any later version.
T8b949e// This program is distributed in the hope that it will be useful,
T8b949e// but WITHOUT ANY WARRANTY; without even the implied warranty of
T8b949e// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
T8b949e// GNU General Public License for more details.
T8b949e// You should have received a copy of the GNU General Public License
T8b949e// along with this program. If not, see <https://www.gnu.org/licenses/>.
Tff7b72#Tff7b72include T8b949e"Boards.h"
Tff7b72#Tff7b72if PLATFORM != PLATFORM_NRF52
Tff7b72#Tff7b72if HAS_BLE
Tff7b72#Tff7b72include T8b949e<Arduino.h>
Tff7b72#Tff7b72include T8b949e<BLEDevice.h>
Tff7b72#Tff7b72include T8b949e<BLEUtils.h>
Tff7b72#Tff7b72include T8b949e<BLEServer.h>
Tff7b72#Tff7b72include T8b949e<BLE2902.h>
Te6edf3template Tff7b72<Tffa657size_t Te6edf3nTff7b72>
Te6edf3class Te6edf3BLEFIFO Tb4b4b4{
Te6edf3privateTff7b72:
Tffa657uint8_t Te6edf3bufferTb4b4b4[Te6edf3nTb4b4b4]Tb4b4b4;
Tffa657int Te6edf3head Tff7b72= T79c0ff0Tb4b4b4;
Tffa657int Te6edf3tail Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3publicTff7b72:
Tffa657void Te6edf3pushTb4b4b4(Tffa657uint8_t Te6edf3valueTb4b4b4) Tb4b4b4{
Te6edf3bufferTb4b4b4[Te6edf3headTb4b4b4] Tff7b72= Te6edf3valueTb4b4b4;
Te6edf3head Tff7b72= Tb4b4b4(Te6edf3head Tff7b72+ T79c0ff1Tb4b4b4) Tff7b72% Te6edf3nTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3head Tff7b72=Tff7b72= Te6edf3tailTb4b4b4) Tb4b4b4{ Te6edf3tail Tff7b72= Tb4b4b4(Te6edf3tail Tff7b72+ T79c0ff1Tb4b4b4) Tff7b72% Te6edf3nTb4b4b4; Tb4b4b4}
Tb4b4b4}
Tffa657int Te6edf3popTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3head Tff7b72=Tff7b72= Te6edf3tailTb4b4b4) Tb4b4b4{
Tff7b72return T79c0ff-1Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tffa657uint8_t Te6edf3value Tff7b72= Te6edf3bufferTb4b4b4[Te6edf3tailTb4b4b4]Tb4b4b4;
Te6edf3tail Tff7b72= Tb4b4b4(Te6edf3tail Tff7b72+ T79c0ff1Tb4b4b4) Tff7b72% Te6edf3nTb4b4b4;
Tff7b72return Te6edf3valueTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Te6edf3clearTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3head Tff7b72= T79c0ff0Tb4b4b4; Te6edf3tail Tff7b72= T79c0ff0Tb4b4b4; Tb4b4b4}
Tffa657int Te6edf3getTb4b4b4(Tffa657size_t Te6edf3indexTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3index Tff7b72>Tff7b72= Te6edf3thisTff7b72-Tff7b72>Te6edf3getLengthTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return T79c0ff-1Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72return Te6edf3bufferTb4b4b4[Tb4b4b4(Te6edf3tail Tff7b72+ Te6edf3indexTb4b4b4) Tff7b72% Te6edf3nTb4b4b4]Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657size_t Te6edf3getLengthTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3head Tff7b72>Tff7b72= Te6edf3tailTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3head Tff7b72- Te6edf3tailTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72return Te6edf3n Tff7b72- Te6edf3tail Tff7b72+ Te6edf3headTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4;
Tff7b72#Tff7b72define RX_BUFFER_SIZE 6144
Tff7b72#Tff7b72define BLE_BUFFER_SIZE 512 T8b949e// Must fit in max GATT attribute length
Tff7b72#Tff7b72define MIN_MTU 50
Te6edf3class Te6edf3BLESerial Tff7b72: Te6edf3public Te6edf3BLECharacteristicCallbacksTb4b4b4, Te6edf3public Te6edf3BLEServerCallbacksTb4b4b4, Te6edf3public Te6edf3BLESecurityCallbacksTb4b4b4, Te6edf3public Te6edf3Stream Tb4b4b4{
Te6edf3publicTff7b72:
Te6edf3BLESerialTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffbeginTb4b4b4(Tff7b72const Tffa657char Tff7b72*Te6edf3nameTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffendTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffonWriteTb4b4b4(Te6edf3BLECharacteristic Tff7b72*Te6edf3characteristicTb4b4b4)Tb4b4b4;
Tffa657int Td2a8ffavailableTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657int Td2a8ffpeekTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657int Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657size_t Td2a8ffreadBytesTb4b4b4(Tffa657uint8_t Tff7b72*Te6edf3bufferTb4b4b4, Tffa657size_t Te6edf3bufferSizeTb4b4b4)Tb4b4b4;
Tffa657size_t Td2a8ffwriteTb4b4b4(Tffa657uint8_t Te6edf3byteTb4b4b4)Tb4b4b4;
Tffa657size_t Td2a8ffwriteTb4b4b4(Tff7b72const Tffa657uint8_t Tff7b72*Te6edf3bufferTb4b4b4, Tffa657size_t Te6edf3bufferSizeTb4b4b4)Tb4b4b4;
Tffa657size_t Td2a8ffprintTb4b4b4(Tff7b72const Tffa657char Tff7b72*Te6edf3valueTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffflushTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffonConnectTb4b4b4(Te6edf3BLEServer Tff7b72*Te6edf3serverTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffonDisconnectTb4b4b4(Te6edf3BLEServer Tff7b72*Te6edf3serverTb4b4b4)Tb4b4b4;
Tffa657uint32_t Td2a8ffonPassKeyRequestTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffonPassKeyNotifyTb4b4b4(Tffa657uint32_t Te6edf3passkeyTb4b4b4)Tb4b4b4;
Tffa657bool Td2a8ffonSecurityRequestTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffonAuthenticationCompleteTb4b4b4(Te6edf3esp_ble_auth_cmpl_tTb4b4b4)Tb4b4b4;
Tffa657bool Td2a8ffonConfirmPINTb4b4b4(Tffa657uint32_t Te6edf3pinTb4b4b4)Tb4b4b4;
Tffa657bool Td2a8ffconnectedTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3BLEServer Tff7b72*Te6edf3ble_serverTb4b4b4;
Te6edf3BLEAdvertising Tff7b72*Te6edf3ble_advTb4b4b4;
Te6edf3BLEService Tff7b72*Te6edf3SerialServiceTb4b4b4;
Te6edf3BLECharacteristic Tff7b72*Te6edf3TxCharacteristicTb4b4b4;
Te6edf3BLECharacteristic Tff7b72*Te6edf3RxCharacteristicTb4b4b4;
Tffa657size_t Te6edf3transmitBufferLengthTb4b4b4;
Tffa657unsigned Tffa657long Tffa657long Te6edf3lastFlushTimeTb4b4b4;
Te6edf3privateTff7b72:
Te6edf3BLESerialTb4b4b4(Te6edf3BLESerial Tff7b72const Tff7b72&Te6edf3otherTb4b4b4) Tff7b72= Te6edf3deleteTb4b4b4;
Tffa657void Te6edf3operatorTff7b72=Tb4b4b4(Te6edf3BLESerial Tff7b72const Tff7b72&Te6edf3otherTb4b4b4) Tff7b72= Te6edf3deleteTb4b4b4;
Te6edf3BLEFIFOTff7b72<Te6edf3RX_BUFFER_SIZETff7b72> Te6edf3rx_bufferTb4b4b4;
Tffa657size_t Te6edf3numAvailableLinesTb4b4b4;
Tffa657uint8_t Te6edf3transmitBufferTb4b4b4[Te6edf3BLE_BUFFER_SIZETb4b4b4]Tb4b4b4;
Tffa657int Te6edf3ConnectedDeviceCountTb4b4b4;
Tffa657void Td2a8ffSetupSerialServiceTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657uint16_t Te6edf3peerMTUTb4b4b4;
Tffa657uint16_t Te6edf3maxTransferSize Tff7b72= Te6edf3BLE_BUFFER_SIZETb4b4b4;
Tffa657bool Td2a8ffcheckMTUTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Tffa657char Tff7b72*Te6edf3BLE_SERIAL_SERVICE_UUID Tff7b72= Ta5d6ff"Ta5d6ff6e400001-b5a3-f393-e0a9-e50e24dcca9eTa5d6ff"Tb4b4b4;
Tff7b72const Tffa657char Tff7b72*Te6edf3BLE_RX_UUID Tff7b72= Ta5d6ff"Ta5d6ff6e400002-b5a3-f393-e0a9-e50e24dcca9eTa5d6ff"Tb4b4b4;
Tff7b72const Tffa657char Tff7b72*Te6edf3BLE_TX_UUID Tff7b72= Ta5d6ff"Ta5d6ff6e400003-b5a3-f393-e0a9-e50e24dcca9eTa5d6ff"Tb4b4b4;
Tffa657bool Te6edf3started Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72endif
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────